package com.zzdz.jdbc.common.log4j;

import org.apache.log4j.Logger;

/**
 * <p>
 * LoggerUtils<br>
 *
 * </p>
 *
 * @author XinLau
 * @version 1.0
 * @since 2019年10月30日 10:50
 */
public class LoggerUtils {

    /**
     * 是否开启Debug
     */
    public static boolean isDebug = Logger.getLogger(LoggerUtils.class).isDebugEnabled();

    /**
     * <p>
     * Debug 输出
     * </p>
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:42:51
     */
    public static void debug(Class<? extends Object> clazz, String message) {
        if (!isDebug) {
            return;
        }
        Logger logger = Logger.getLogger(clazz);
        logger.debug(message);
    }

    /**
     * <p>
     * formatDebug Debug 输出
     * </p>
     *
     * @param clazz        目标.Class
     * @param formatString 输出信息key
     * @param value        输出信息value
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:42:15
     */
    public static void formatDebug(Class<? extends Object> clazz, String formatString, Object... value) {
        if (!isDebug) {
            return;
        }
        if (isBlank(formatString)) {
            return;
        }
        if (null != value && value.length != 0) {
            formatString = String.format(formatString, value);
        }
        debug(clazz, formatString);
    }

    /**
     * <p>
     * Error 输出
     * </p>
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     * @param e       异常类
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:41:39
     */
    public static void error(Class<? extends Object> clazz, String message, Exception e) {
        Logger logger = Logger.getLogger(clazz);
        if (null == e) {
            logger.error(message);
            return;
        }
        logger.error(message, e);
    }

    /**
     * <p>
     * Error 输出
     * </p>
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:39:49
     */
    public static void error(Class<? extends Object> clazz, String message) {
        error(clazz, message, null);
    }

    /**
     * <p>
     * formatError 异常填充值输出
     * </p>
     *
     * @param clazz        目标.Class
     * @param e            异常类
     * @param formatString 输出信息key
     * @param value        输出信息value
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:40:27
     */
    public static void formatError(Class<? extends Object> clazz, Exception e, String formatString, Object... value) {
        if (isBlank(formatString)) {
            return;
        }
        if (null != value && value.length != 0) {
            formatString = String.format(formatString, value);
        }
        error(clazz, formatString, e);
    }

    /**
     * <p>
     * formatError 异常填充值输出
     * </p>
     *
     * @param clazz        目标.Class
     * @param formatString 输出信息key
     * @param value        输出信息value
     * @return void
     * @author XinLau
     * @since 2019年4月29日下午5:41:05
     */
    public static void formatError(Class<? extends Object> clazz, String formatString, Object... value) {
        if (isBlank(formatString)) {
            return;
        }
        if (null != value && value.length != 0) {
            formatString = String.format(formatString, value);
        }
        error(clazz, formatString);
    }

    /**
     * @description: 一次性判断多个或单个对象为空。
     * @param: objects -
     * @return: boolean - 只要有一个元素为Blank，则返回true
     * @date: 2019/8/9 17:24
     * @author: XinLau
     * @creed: The only constant is change ! ! !
     */
    public static boolean isBlank(Object...objects){
        Boolean result = false ;
        for (Object object : objects) {
            if(null == object || "".equals(object.toString().trim())
                    || "null".equals(object.toString().trim())){
                result = true ;
                break ;
            }
        }
        return result ;
    }

}
